#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(_WINDOWS) || defined(_MSC_VER)
#	define WINDOWS				1
#elif defined(__linux__) || defined(__unix__)
#	define LINUX				1
#elif defined(__APPLE__) || defined( __APPLE_CC__)
#	define APPLE				1
#	include "TargetConditionals.h"
#	if defined(__MACOSX__)
#		define MACOSX			1
#	elif defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR)
#		define IOS				1
#	endif
#elif defined(_ANDROID)
#	define ANDROID				1
#endif

#if !defined(WINDOWS)
#	define WINDOWS				0
#endif
#if !defined(LINUX)
#	define LINUX				0
#endif
#if !defined(APPLE)
#	define APPLE				0
#endif
#if !defined(MACOSX)
#	define MACOSX				0
#endif
#if !defined(IOS)
#	define IOS					0
#endif
#if !defined(ANDROID)
#	define ANDROID				0
#endif

#if (WINDOWS + LINUX + APPLE + MACOSX + IOS + ANDROID) != 1
#	error Unknown platform, no support!
#endif

#if defined(__GNUC__)
#	define COMPILER_GNUC		1 // GNU Compiler
#	define COMP_VER				(((__GNUC__)*100) + (__GNUC_MINOR__ * 10) +  __GNUC_PATCHLEVEL__)
#elif defined(_MSC_VER)
#	define COMPILER_VC			1 // VisualC++
#	define COMP_VER				_MSC_VER
#elif defined (__INTEL_COMPILER)
#	define COMPILER_INTEL		1 // Intel
#	define COMP_VER				__INTEL_COMPILER
#elif defined ( __clang__ )
#	define COMPILER_CLANG		1 // Clang
#	define COMP_VER				__clang_major__
#endif

#if !defined(COMPILER_GNUC)
#	define COMPILER_GNUC		0
#endif
#if !defined(COMPILER_VC)
#	define COMPILER_VC			0
#endif
#if !defined(COMPILER_INTEL)
#	define COMPILER_INTEL		0
#endif
#if !defined(COMPILER_CLANG)
#	define COMPILER_CLANG		0
#endif

#if (COMPILER_GNUC + COMPILER_VC + COMPILER_INTEL + COMPILER_CLANG) != 1
#	error Unknown compiler, no support!
#endif

#if defined(_DEBUG) || defined(DEBUG)
#	define DEBUG_MODE		1
#else
#	define DEBUG_MODE		0
#endif

#if COMPILER_VC
// Secure versions aren't multiplatform, so we won't be using them
#	define _CRT_SECURE_NO_WARNINGS
#endif